As the value and use of information continues to increase, individuals and businesses seek additional ways to process and store information. One option available to users is information handling systems. An information handling system generally processes, compiles, stores, and/or communicates information or data for business, personal, or other purposes thereby allowing users to take advantage of the value of the information. Because technology and information handling needs and requirements vary between different users or applications, information handling systems may also vary regarding what information is handled, how the information is handled, how much information is processed, stored, or communicated, and how quickly and efficiently the information may be processed, stored, or communicated. The variations in information handling systems allow for information handling systems to be general or configured for a specific user or specific use such as financial transaction processing, airline reservations, enterprise data storage, or global communications. In addition, information handling systems may include a variety of hardware and software components that may be configured to process, store, and communicate information and may include one or more computer systems, data storage systems, and networking systems.
In many computing applications, an information handling system includes a hypervisor for hosting one or more virtual machines. A hypervisor may comprise software and/or firmware generally operable to allow multiple virtual machines and/or operating systems to run on a single information handling system at the same time. This operability is generally allowed via virtualization, a technique for hiding the physical characteristics of computing system resources (e.g., physical hardware of the computing system) from the way in which other systems, applications, or end users interact with those resources. Thus, a virtual machine may comprise any program of executable instructions, or aggregation of programs of executable instructions, configured to execute a guest operating system on a hypervisor or host operating system in order to act through or in connection with the hypervisor/host operating system to manage and/or control the allocation and usage of hardware resources such as memory, central processing unit time, disk space, and input and output devices, and provide an interface between such hardware resources and application programs hosted by the guest operating system.
Information handling systems and virtual machines often use an array of storage resources, such as a Redundant Array of Independent Disks (RAID), for example, for storing information. Arrays of storage resources typically utilize multiple disks to perform input and output operations and can be structured to provide redundancy which may increase fault tolerance. Other advantages of arrays of storage resources may be increased data integrity, throughput and/or capacity. In operation, one or more storage resources disposed in an array of storage resources may appear to an operating system as a single logical storage unit or “virtual storage resource.” Implementations of storage resource arrays can range from a few storage resources disposed in a server chassis, to hundreds of storage resources disposed in one or more separate storage enclosures.
As a specific example, a user may implement a RAID configuration including one or more servers coupled to a number of storage enclosures containing hundreds of storage resources. In a typical configuration, a RAID may include active storage resources making up one or more virtual storage resources and one or more spare storage resources (also known as “hot spares”). In such a configuration, the storage resources configured as active spares generally may remain idle until a virtual storage resource suffers a failure of one of its active storage resources, at which time the virtual storage resource may rebuild itself using an active spare. However, situations may exist in which a spare storage resource is not available to rebuild a virtual storage resource after failure of an active storage resource, placing the virtual storage resource in what is known as a degraded state. In such a situation, failure of another active storage resource in the virtual storage resource may lead to loss of data.